home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / gui / userform.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  4KB  |  116 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import wx
  5. from util import import_function, callany
  6. from gui.toolbox import GetTextFromUser
  7.  
  8. def getinput(obj, parent, needs, callback, **k):
  9.     diag = None
  10.     if hasattr(needs, 'Prompt'):
  11.         diag = needs(parent, obj)
  12.     elif isinstance(needs, basestring) and needs.startswith('@'):
  13.         diag = import_function(needs[1:])(parent, obj)
  14.     
  15.     if diag is not None:
  16.         diag.Prompt(callback)
  17.         diag.Destroy()
  18.     elif callable(needs):
  19.         needs = needs(obj)
  20.     
  21.     pprint = pprint
  22.     import pprint
  23.     pprint(needs)
  24.     if len(needs) == 1 and issubclass(needs[0][0], basestring):
  25.         (type, name, default) = needs[0]
  26.         val = GetTextFromUser(name, caption = name, default_value = default)
  27.         if val is not None:
  28.             return callback(val)
  29.         
  30.         return None
  31.     
  32.     FormFrame(obj, parent, needs, callback, **k)
  33.  
  34.  
  35. def maketext(self, name = '', default = '', obj = None):
  36.     if default is None:
  37.         default = ''
  38.     
  39.     if callable(default):
  40.         default = callany(default, obj)
  41.     
  42.     ctrl = wx.TextCtrl(self.content, -1, name = name, value = default)
  43.     return (name, ctrl)
  44.  
  45. typetable = {
  46.     str: maketext,
  47.     int: maketext,
  48.     unicode: maketext }
  49.  
  50. class FormFrame(wx.Frame):
  51.     
  52.     def __init__(self, obj, parent, needs, callback, title = None):
  53.         if not title:
  54.             pass
  55.         wx.Frame.__init__(self, parent, title = 'Please enter a value')
  56.         self.content = content = wx.Panel(self)
  57.         content.Sizer = s = wx.FlexGridSizer(0, 2, 15, 15)
  58.         self.callback = callback
  59.         self.needs = needs
  60.         self.gui_items = [ self.gentype(need, obj) for need in self.needs ]
  61.         for i, item in enumerate(self.gui_items):
  62.             s.Add(wx.StaticText(content, -1, label = _(item[0])), 0, wx.EXPAND | wx.ALL, 3)
  63.             s.Add(item[1], 0, wx.EXPAND | wx.ALL, 3)
  64.         
  65.         b = wx.Button(content, -1, label = 'Submit')
  66.         b.Bind(wx.EVT_BUTTON, self.getvalues)
  67.         b.SetDefault()
  68.         s.Add(b, 1, wx.EXPAND | wx.ALL, 7)
  69.         self.Sizer = wx.BoxSizer(wx.VERTICAL)
  70.         self.Sizer.Add(content, 1, wx.EXPAND)
  71.         self.Fit()
  72.         self.CenterOnParent()
  73.         self.Show(True)
  74.  
  75.     
  76.     def gentype(self, need, obj):
  77.         
  78.         try:
  79.             return typetable[need[0]](self, *need[1:], **{
  80.                 'obj': obj })
  81.         except KeyError:
  82.             e = None
  83.             raise TypeError("I don't know how to get %r from the user" % need[0])
  84.  
  85.  
  86.     
  87.     def getvalues(self, e):
  88.         vals = []
  89.         for i in range(len(self.gui_items)):
  90.             t = None if isinstance(self.needs[i], tuple) else self.needs[i]
  91.             vals.append(t(self.gui_items[i][1].GetValue()))
  92.         
  93.         self.Show(False)
  94.         self.callback(*vals)
  95.         self.Close()
  96.         self.Destroy()
  97.  
  98.  
  99.  
  100. def printstuff(*stuff):
  101.     for item in stuff:
  102.         print 'type', type(item), 'item', item
  103.     
  104.  
  105. if __name__ == '__main__':
  106.     app = wx.PySimpleApp()
  107.     stuff = ((str, 'name1', 'bleh'), (int, 'name2', '45'), (str, 'name3', 'bleh3'))
  108.     
  109.     def callback():
  110.         print 'yay'
  111.  
  112.     frame = FormFrame(None, None, callback = printstuff, needs = stuff)
  113.     app.SetTopWindow(frame)
  114.     app.MainLoop()
  115.  
  116.